package com.wanghlme.bookstore.util.common;

import lombok.extern.slf4j.Slf4j;

import java.nio.charset.StandardCharsets;
import java.util.Base64;

/**
 * 自定义 Base64 字符串处理工具类
 *
 * @author WangHailong
 * @date 2021.09.13 21:25
 */
@Slf4j
public class Base64Util {
    private static final Base64.Encoder ENCODER = Base64.getEncoder();
    private static final Base64.Decoder DECODER = Base64.getDecoder();

    /**
     * 进行字符串解密操作
     *
     * @param originStr 待解密的源字符串
     * @return 解密后的字符串
     * @apiNote 该方法实现对传入字符串进行基于 Base64 的解密操作
     */
    public static String decrypt(String originStr) {
        log.debug("对源字符串进行解密操作 -> {}", originStr);
        /* 若传入字符串为空，则跳过解密处理 */
        if (originStr == null || originStr.isEmpty() || originStr.isBlank()) {
            return "";
        }
        String targetStr = new String(DECODER.decode(originStr), StandardCharsets.UTF_8);
        log.debug("源字符串解密后的字符串 -> {}", targetStr);
        return targetStr;
    }

    /**
     * 进行字符串加密操作
     *
     * @param originStr 待加密的源字符串
     * @return 加密后的字符串
     * @apiNote 该方法实现对传入字符串进行基于 Base64 的加密操作
     */
    public static String encrypt(String originStr) {
        log.debug("对源字符串进行加密操作 -> {}", originStr);
        /* 若传入字符串为空，则跳过加密处理 */
        if (originStr == null || originStr.isEmpty() || originStr.isBlank()) {
            return "";
        }
        String targetStr = ENCODER.encodeToString(originStr.getBytes(StandardCharsets.UTF_8));
        log.debug("源字符串加密后的字符串 -> {}", targetStr);
        return targetStr;
    }
}
